﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClusterAggregation.ClusterAggregators
{
    using Datum;
    using DataSets;
    /**
     * Consensus function interface (AKA Ensemble algorithms).
     */
    public interface IConsensus
    {
        /**
         * Main API to ensemble a group of partitions.
         * @param partitions(CPartition[]) [IN] the group of partitions to ensemble
         * @param data (AData[]) [IN] the original data. while most algorithms don't make use of this data, some might (such as CVolkovichYahalom cluster aggregation algirithm), it's also very convinient if you wish to display the data later on, so you can relate each datum to it's cluster.
         * @param k (int) [IN] the number of partitions. Generally speaking, not all partitions have to have the same number of clusters. (not so when using special aggregation algorithms).
         * @return resulting partition
         */
        CPartition ensemble(CPartition[] partitions, AData[] data, int k);
    }
}
